数据缓冲与解包: 以串口为例

🔍 溯源 ✍️ Jack | 📅 2024-11-18 | 👍 1 | 原帖↗
#知识星球 #立芯嵌入式 #来源/立芯星球 #技术/UART #技术/DMA #技术/缓冲区设计 #质量/精华

原帖 | Jack | 2024-11-18 15:37 | 👍1 | 阅读约1

数据缓冲与解包:

以串口为例:

分显示双buffer和隐式双buffer,那么什么是显式双buffer呢?就是你需要有两个独立的缓冲区。那么,每次数据全满以后,他就会去切换那个缓冲区。那么隐式双buffer的话就只有一个缓冲区,当他半满时,他就去通知线程解包。

往往,显式双Buffer需要配合Normal然后在全满里进行切换Buffer,并通知线程解包。
如果是隐式双buffer,则使用半满终中断和全满中断和circular模式,实现同一个buffer上的这种前后半段复用。

然后,根据解包的地点又分为,原地解包和异地解包,原地解包的好处是,数据在哪,就在哪原地拆包,并不需要再把数据拷贝出来,即,DMA搬运的目标地址区域和解包的地点区域一致。异地解包则需要把数据及时拷贝(DMA)出来到另一个地方进行解包。
原地解包的好处是,中断处理时间短,指针快速切换,但是数据快的话还是会覆盖还没解包的数据(取决于解包线程的速度)。
异地解包的好处是,通过DMA把未解包数据提前拿走,这样新的数据不会覆盖,对解包线程的优先级和实时性要求没那么苛刻,但是这样会使用较大空间,同时也要使用DMA去搬运数据。(配套双 buffer 串口 Demo 见B站视频中的串口单字节不定长双buffer的DMA和CPU并行工作Demo,环形缓冲+协议帧实战见老师,我们的串口dma加环形缓冲区主要是用于传输数据

31bcab0b4adc.jpg

37533685f16c.jpg

992564241070.jpg

366dbe4b1832.jpg

12875bd367b4.jpg


相关笔记